package cn.kwq.project_manger.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.kwq.project_manger.pojo.QTag;
import cn.kwq.project_manger.pojo.Tag;
import cn.kwq.project_manger.pojo.dto.FindTagDto;
import cn.kwq.project_manger.pojo.dto.PageDto;
import cn.kwq.project_manger.repostitory.TagRepository;
import cn.kwq.project_manger.service.TagService;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.querydsl.core.types.ExpressionUtils.count;

@Service
public class TagServiceImpl implements TagService {

    @Autowired
    TagRepository tagRepository;

    @Autowired
    JPAQueryFactory jpaQueryFactory;


    @Override
    public PageDto FindProjectTags(FindTagDto dto) {
        String tagName = dto.getTagName();

        QTag tag=QTag.tag;
        //tagName非空时候进行模糊查询
        if (StrUtil.hasBlank(tagName)||tagName==null){
            List<Tag> fetch = jpaQueryFactory.select(tag)
                    .from(tag)
                    .where(tag.tagType.eq(0))
                    .offset((long) (dto.getPageNum() - 1) * dto.getPageSize())
                    .limit(dto.getPageSize())
                    .fetch();
            Long total = jpaQueryFactory.select(tag.tagId.count())
                    .from(tag)
                    .where(tag.tagType.eq(0))
                    .fetchOne();

            return PageDto.builder()
                    .pageDate(fetch)
                    .total(total)
                    .build();
        }

        List<Tag> fetch = jpaQueryFactory.select(tag)
                .from(tag)
                .where(tag.tagName.like("%" + tagName + "%"))
                .where(tag.tagType.eq(0))
                .offset((long) (dto.getPageNum() - 1) * dto.getPageSize())
                .limit(dto.getPageSize())
                .fetch();
        Long total = jpaQueryFactory.select(tag.tagId.count())
                .from(tag)
                .where(tag.tagName.like("%" + tagName + "%"))
                .where(tag.tagType.eq(0))
                .fetchOne();

        return PageDto.builder()
                .pageDate(fetch)
                .total(total)
                .build();
        }

    @Override
    public PageDto FindTeamTags(FindTagDto dto) {
        String tagName = dto.getTagName();

        QTag tag=QTag.tag;
        //tagName非空时候进行模糊查询
        if (StrUtil.hasBlank(tagName)||tagName==null){
            List<Tag> fetch = jpaQueryFactory.select(tag)
                    .from(tag)
                    .where(tag.tagType.eq(1))
                    .offset((long) (dto.getPageNum() - 1) * dto.getPageSize())
                    .limit(dto.getPageSize())
                    .fetch();
            Long total = jpaQueryFactory.select(tag.tagId.count())
                    .from(tag)
                    .where(tag.tagType.eq(1))
                    .fetchOne();

            return PageDto.builder()
                    .pageDate(fetch)
                    .total(total)
                    .build();
        }

        List<Tag> fetch = jpaQueryFactory.select(tag)
                .from(tag)
                .where(tag.tagName.like("%" + tagName + "%"))
                .where(tag.tagType.eq(1))
                .offset((long) (dto.getPageNum() - 1) * dto.getPageSize())
                .limit(dto.getPageSize())
                .fetch();
        Long total = jpaQueryFactory.select(tag.tagId.count())
                .from(tag)
                .where(tag.tagName.like("%" + tagName + "%"))
                .where(tag.tagType.eq(1))
                .fetchOne();

        return PageDto.builder()
                .pageDate(fetch)
                .total(total)
                .build();
    }


    @Override
    public String AddNewTag(String tagName) {

        QTag tag=QTag.tag;
        // TODO: 2022/11/16 分页
        String tagOne = jpaQueryFactory.select(tag.tagName)
                .from(tag)
                .where(tag.tagName.eq(tagName))
                .fetchOne();
        if (tagOne!=null | StrUtil.isBlank(tagOne)){
            return "标签已存在";
        }
        return tagRepository.save(Tag.builder().tagName(tagName).build()).getTagName();
    }
}
